// function Fun(age, name) {
//   this.age = age;
//   this.name = name;
//   // return [1,2,3]
//   // return {};
// }
// console.log("返回值类型", Fun(18, "张三"));
// function create(fn, ...args) {
//   //1. 创建了一个空的对象
//   var obj = {}; //var obj = Object.create({})
//   //2. 将空对象的原型，指向于构造函数的原型
//   // Object.setPrototypeOf(obj,fn.prototype);
//   obj.__proto__ = fn.prototype;
//   //3. 将空对象作为构造函数的上下文,改变this指向,即obj绑定到构造函数上，便可以访问构造函数中的属性，即obj.fn(args)）
//   var result = fn.apply(obj, args);
//   //4. 对构造函数有返回值的处理判断
//   // 如果返回的result是一个对象则返回
//   // new方法失效，否则返回obj
//   return result instanceof Object ? result : obj;
// }
// // 测试一下
// console.log(create(Fun, 18, "张三"));

// var obj = {
//   0: "one",
//   1: "two",
//   length: 2,
// };

// obj = Array.from(obj);
// for (var key of obj) {
//   console.log(key);
// }

// 防抖函数this指向
function debounce(fn, delay = 500) {
  let timer = null;
  return function () {
    console.log("返回函数里的this:", this);
    if (timer) {
      clearTimeout(timer);
      timer = null;
    }
    timer = setTimeout(() => {
      console.log("setTimeout里的this:", this);
      fn.apply(this, arguments);
    }, delay);
  };
}

let test = {
  hello: "testThis",
};

test.debounceFn = debounce(function () {
  console.log("for test:", this);
});

test.debounceFn();


